// app.js

// 站点配置文件
import config from './config.js'


App({
  globalData: {
    userInfo: null
  },
  // 公共配置文件
  config: config,

  onLaunch() {

  },



  // ####################################################################################################
  // # 自定义请求方法封装
  // ####################################################################################################

  // 请求
  request(url, data = {}, method = 'GET', loadingType = "default", resolve, reject, header = {
    'content-type': 'application/x-www-form-urlencoded',
    'auth-token': wx.getStorageSync('auth-token')
  }) {
    if (loadingType == "default")
      this.showLoading()
    else if (loadingType == "nav")
      wx.showNavigationBarLoading()
    try {
      wx.request({
        url: url,
        data: data,
        header: header,
        method: method,
        success: res => {
          if (loadingType == "default")
            this.hideLoading()
          else if (loadingType == "nav")
            wx.hideNavigationBarLoading()
          if (res.statusCode !== 200 || typeof res.data !== 'object') {
            this.showToast("网络请求出错", 2000)
            return false
          }
          resolve(res.data)
        },
        fail: () => {
          if (loadingType == "default")
            this.hideLoading()
          else if (loadingType == "nav")
            wx.hideNavigationBarLoading()
          this.showToast("请求接口没有正确响应", 2000)
          reject()
        }
      })
    } catch (e) {
      this.showToast("请求失败,请稍后再试", 2000)
    }
  },
  // loading 显示
  showLoading() {
    wx.showLoading({
      title: '努力加载中'
    })
  },
  // loading 隐藏
  hideLoading() {
    wx.hideLoading()
  },
  // showToast 文字提示
  showToast(msg, duration = 5000, icon = "none") {
    wx.showToast({
      title: msg,
      icon: icon,
      duration: duration
    })
  },
  // showToast success 文字提示
  showToastSuccess(msg) {
    wx.showToast({
      title: msg,
      icon: 'success',
      mask: true,
      duration: 2000,
    });
  },
  // showModal 弹窗提示
  showModal(msg) {
    wx.showModal({
      title: '提示',
      content: msg,
      showCancel: false,
    })
  },

  // ####################################################################################################





  // ####################################################################################################
  // # 验证用户信息 userInfo
  // ####################################################################################################

  // 验证用户信息
  checkUserInfo(resolve, reject) {
    let userInfo = wx.getStorageSync('userInfo')
    if (userInfo)
      resolve(userInfo)

    wx.getUserProfile({
      desc: '用于完善用户资料',
      success: (res) => {
        let info = res.userInfo
        wx.setStorageSync('userInfo', info)
        this.handleUserInfo(info)
        // console.log('userInfo', info)
        resolve(info)
      }
    })
  },
  // 用户信息
  handleUserInfo(userInfo) {
    this.request(this.config.pushUserInfo, {
      nick_name: userInfo.nickName,
      avatar_url: userInfo.avatarUrl,
      gender: userInfo.gender,
      language: userInfo.language,
      country: userInfo.country,
      province: userInfo.province,
      city: userInfo.city,
    }, 'POST', 'nav', res => {
      wx.stopPullDownRefresh()
    }, err => {
      wx.stopPullDownRefresh()
    })
  },

  // ####################################################################################################





  // ####################################################################################################
  // # 验证登陆获取openid
  // ####################################################################################################

  // 验证用户在服务器的登录状态
  checkLogin(resolve, reject) {
    let authToken = wx.getStorageSync('auth-token')
    if (!authToken) {
      this.handleLogin()
      return false
    }

    this.request(this.config.checkLogin, {}, 'POST', 'nav', res => {
      wx.stopPullDownRefresh()
      if (res.status !== 200)
        this.handleLogin()
    }, err => {
      wx.stopPullDownRefresh()
    })
  },
  // 登录
  handleLogin() {
    let that = this
    wx.login({
      success(res) {
        if (res.code) {
          that.onLogin(res.code)
        }
      }
    })
  },
  // 登录
  onLogin(code) {
    this.request(this.config.userLogin, {
      code: code
    }, 'POST', 'nav', res => {
      wx.stopPullDownRefresh()
      if (res.status === 200) {
        wx.setStorageSync('auth-token', res.data.token)
      } else {
        this.showToast(res.msg)
        wx.removeStorageSync('userInfo')
      }
    }, err => {
      wx.stopPullDownRefresh()
    })
  }

  // ####################################################################################################

})